home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Environments / Small Eiffel 0.4.8 / lib_std / std_file.e < prev    next >
Text File  |  1997-04-13  |  2KB  |  97 lines

  1. -- Part of SmallEiffel -- Read DISCLAIMER file -- Copyright (C) 
  2. -- Dominique COLNET and Suzanne COLLIN -- colnet@loria.fr
  3. --
  4. deferred class STD_FILE
  5. --
  6. -- Root class of : 
  7. --   - STD_INPUT to read on the keyboard (known as `std_input').
  8. --   - STD_OUTPUT to write on the screen (known as `std_output').
  9. --   - STD_INPUT_OUTPUT to read/write on the keyboard/screen (known as `io').
  10. --   - STD_FILE_READ to read a named file on disk. 
  11. --   - STD_FILE_WRITE to write a named file on disk.
  12. --   - CURSES interactive screen/cursor handling.
  13. --   - STD_ERROR to write on the error file (default is screen).
  14. --
  15. -- Note : a common list of feature (such as `put_character',  
  16. --        `put_string', etc.) are shared by all classes so you can 
  17. --        exchanges objects.
  18. --        For example, it easy to test writing on the screen (using 
  19. --        `std_output') and then to use a named file (using 
  20. --        STD_FILE_WRITE or `connect_to').
  21. --
  22.  
  23. feature {ANY}
  24.    
  25.    path: STRING;
  26.      -- Not Void when connected to the corresponding file on the disk.
  27.    
  28.    connect_to(new_path: STRING) is
  29.       require
  30.      not is_connected;
  31.      path = Void;
  32.      not new_path.empty;
  33.       deferred
  34.       end;
  35.    
  36.    disconnect is
  37.       require
  38.      is_connected;
  39.       deferred
  40.       end;
  41.    
  42.    is_connected: BOOLEAN is
  43.       do
  44.      Result := path /= Void;
  45.       end;
  46.    
  47. feature {NONE}
  48.    --
  49.    -- NOTE: use only a few basic external C calls.
  50.    --
  51.    
  52.    mode: STRING; 
  53.  
  54.    tmp_path: STRING is
  55.       once
  56.      !!Result.make(256);
  57.       end;
  58.  
  59.    fopen(f: STRING; m: STRING): POINTER is
  60.       require
  61.      f /= Void;
  62.      m /= Void
  63.       do
  64. --***    MLK : tmp_path.copy(f);
  65. --***    MLK : Result := ansi_c_fopen(tmp_path.to_external,m.to_external);
  66.      Result := ansi_c_fopen(f.twin.to_external,m.to_external);
  67.       end;
  68.  
  69.    ansi_c_fopen(f: POINTER; m: POINTER): POINTER is
  70.       external "IC"
  71.       alias "fopen"
  72.       end;
  73.    
  74.    fclose(stream_pointer : POINTER): INTEGER is
  75.       external "IC"
  76.       end;
  77.  
  78.    fputc(c: CHARACTER; stream_pointer: POINTER): CHARACTER is
  79.       external "IC"
  80.       end;
  81.    
  82.    fgetc(stream_pointer : POINTER): CHARACTER is
  83.      -- Result is of type CHARACTER because a int is a char !
  84.       external "IC"
  85.       end;
  86.  
  87.    feof(stream_ptr: POINTER): BOOLEAN is
  88.       do
  89.      c_inline_c("R=feof((FILE*)C->_input_stream);");
  90.       end;
  91.  
  92.    fflush(stream_pointer: POINTER): INTEGER is
  93.       external "IC"
  94.       end;
  95.  
  96. end -- STD_FILE
  97.